From aec3a6ed16b00d7381f3e684ac8a5e8b530bdb47 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 6 Jul 2006 10:23:34 -0600 Subject: [PATCH] [IA64] add unw_init_from_interruption() From stock upstream unwind.c Signed-off-by: Akio Takebe [fixed patch to match upstream] Signed-off-by: Alex Williamson --- xen/arch/ia64/linux-xen/unwind.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/xen/arch/ia64/linux-xen/unwind.c b/xen/arch/ia64/linux-xen/unwind.c index c8bc766b4f..168948ecc0 100644 --- a/xen/arch/ia64/linux-xen/unwind.c +++ b/xen/arch/ia64/linux-xen/unwind.c @@ -2055,6 +2055,28 @@ init_frame_info (struct unw_frame_info *info, struct task_struct *t, STAT(unw.stat.api.init_time += ia64_get_itc() - start; local_irq_restore(flags)); } +void +unw_init_from_interruption (struct unw_frame_info *info, struct task_struct *t, + struct pt_regs *pt, struct switch_stack *sw) +{ + unsigned long sof; + + init_frame_info(info, t, sw, pt->r12); + info->cfm_loc = &pt->cr_ifs; + info->unat_loc = &pt->ar_unat; + info->pfs_loc = &pt->ar_pfs; + sof = *info->cfm_loc & 0x7f; + info->bsp = (unsigned long) ia64_rse_skip_regs((unsigned long *) info->regstk.top, -sof); + info->ip = pt->cr_iip + ia64_psr(pt)->ri; + info->pt = (unsigned long) pt; + UNW_DPRINT(3, "unwind.%s:\n" + " bsp 0x%lx\n" + " sof 0x%lx\n" + " ip 0x%lx\n", + __FUNCTION__, info->bsp, sof, info->ip); + find_save_locs(info); +} + void unw_init_frame_info (struct unw_frame_info *info, struct task_struct *t, struct switch_stack *sw) { -- 2.30.2